home *** CD-ROM | disk | FTP | other *** search
- .include new.mac
- .include ..\cex.mac
- .include ..\nsp.mac
- .include ..\cexlib.mac
- .include ..\cmn.mac
- .include ..\big.mac
- *************************************************************************
- * XDEF AREA *
- *************************************************************************
- .xdef BigScroll
- .text
- *********************************************************
- * 背景のスクロールの計算を行う *
- *********************************************************
- BigScroll:
- PUSH d0-d5/a0-a3
- *****************************************
- * *
- *****************************************
- movea.l CMN_BIG_CHR1_ADR(a6) ,a0
- movea.l CMN_BIG_CHR2_ADR(a6) ,a1
- movea.l CexDataAdr,a2
- *********************************************************
- * 座標が位置を判定し、左側と右側を設定する *
- *********************************************************
- move.w CHR_VX(a0) ,d0
- move.w CHR_VX(a1) ,d1
- cmp.w d0 ,d1
- bge.w @f
- *************************************************
- * 2Pの方が小さいので交換 *
- *************************************************
- exg.l a0 ,a1
- @@: *********************************************************
- * 左側と右側の距離を計る *
- *********************************************************
- * movea.l CHR_PMADR(a0) ,a3 * a3..ムーブ判定情報
- * move.w MVE_TX(a3) ,d4
-
- * movea.l CHR_PMADR(a1) ,a3 * a3..ムーブ判定情報
- * moveq.l #0 ,d5
- * sub.w MVE_TX(a3) ,d5
-
- * move.w CHR_VX(a0) ,d1
- * add.w d4 ,d1
-
- * move.w CHR_VX(a1) ,d0
- * add.w d5 ,d0
- * sub.w d1 ,d0
-
- ******************************************************************************
- movea.l CHR_PMADR(a0) ,a3 * a3..ムーブ判定情報
- cmp.w #0 ,CHR_DIR(a0)
- bne CHR1_HIDARI
- move.w MVE_TX(a3) ,d4
- bra.w CHR2
- CHR1_HIDARI:
- moveq.l #0 ,d4
- sub.w MVE_TX(a3) ,d4
- moveq.l #0 ,d1
- move.b MVE_XD(a3) ,d1
- sub.w d1 ,d4
- CHR2:
- movea.l CHR_PMADR(a1) ,a3 * a3..ムーブ判定情報
-
- cmp.w #0 ,CHR_DIR(a1)
- beq CHR2_MIGI
- moveq.l #0 ,d5
- sub.w MVE_TX(a3) ,d5
- bra.w CHRSET_END
- CHR2_MIGI:
- move.w MVE_TX(a3) ,d5
- moveq.l #0 ,d1
- move.b MVE_XD(a3) ,d1
- add.w d1 ,d5
-
- CHRSET_END:
- move.w d5 ,d0
- add.w CHR_VX(a1) ,d0
- move.w d4 ,d1
- add.w CHR_VX(a0) ,d1
- sub.w d1 ,d0
- *********************************************************
- * 両者の距離がスクロール範囲以上か? *
- *********************************************************
- cmpi.w #256-MAX_SCROLL_POINT*2 ,d0
- bgt.w SC_OVER
- *************************************************
- * 左補正のチェック *
- *************************************************
- movea.l CHR_PMADR(a0) ,a3 * a3..ムーブ判定情報
- move.w REP_VRL_SPR_X(a2) ,d0
- addi.w #MAX_SCROLL_POINT ,d0 * d0..左スクロール開始ポイント
- move.w CHR_VX(a0) ,d1
- add.w d4 ,d1 * d1..左判定ポイント
- cmp.w d0 ,d1
- bge.w SC_RIGHT
- *****************************************
- * 仮想座標調整 *
- *****************************************
- move.w d0 ,d2
- sub.w d1 ,d2 * d2..はみ出した量
- * はみ出した量補正
- sub.w d2 ,REP_VRL_SPR_X(a2)
- bpl.w @f
- *********************************
- * 0以下の領域 *
- *********************************
- move.w #0 ,REP_VRL_SPR_X(a2)
- *****************************************
- * *
- *****************************************
- move.w CHR_VX(a0) ,d3
- add.w d4 ,d3
-
- cmpi.w #0 ,d3
- bge.w @f
- move.l CHR_AMD(a0) ,d0
- btst.l #BIT_AMD_FUNBARI ,d0
- bne.w SCR_OVER
- tst.w CHR_TMODE(a0)
- * bne.w @f
- bne.w CAN_CHECK
-
- moveq.l #0 ,d3
- sub.w d4 ,d3
- move.w d3 ,CHR_VX(a0)
- * bra.w @f
- bra.w CAN_CHECK
-
- SCR_OVER:
- move.w CHR_VX(a0) ,d2
-
- moveq.l #0 ,d3
- sub.w d4 ,d3
- move.w d3 ,CHR_VX(a0)
-
- sub.w d2 ,d3
- add.w d3 ,CHR_VX(a1)
- * bra.w @f
- bra.w CAN_CHECK
-
- SC_RIGHT: *************************************************
- * 右補正のチェック *
- *************************************************
- movea.l CHR_PMADR(a1) ,a3 * a3..ムーブ判定情報
- move.w REP_VRL_SPR_X(a2) ,d0
- addi.w #256-MAX_SCROLL_POINT ,d0 * d0..右スクロールポイント
- move.w CHR_VX(a1) ,d1
- add.w d5 ,d1 * d1..右判定ポイント
- cmp.w d1 ,d0
- bgt.w @f
- *****************************************
- * 仮想座標調整 *
- *****************************************
- move.w d1 ,d2
- sub.w d0 ,d2
- add.w d2 ,REP_VRL_SPR_X(a2)
- cmpi.w #256 ,REP_VRL_SPR_X(a2)
- ble.w @f
- *********************************
- * 256以上の領域 *
- *********************************
- move.w #256 ,REP_VRL_SPR_X(a2)
- *****************************************
- * *
- *****************************************
- move.w CHR_VX(a1) ,d3
- add.w d5 ,d3
- cmpi.w #512 ,d3
- blt.w @f
- move.l CHR_AMD(a1) ,d0
- btst.l #BIT_AMD_FUNBARI ,d0
- bne.w SCL_OVER
- tst.w CHR_TMODE(a1)
- * bne.w @f
- bne.w CAN_CHECK
-
- move.w #512 ,d3
- sub.w d5 ,d3
- move.w d3 ,CHR_VX(a1)
- * bra.w @f
- bra.w CAN_CHECK
-
- SCL_OVER:
- move.w CHR_VX(a1) ,d2
- add.w d5 ,d2
-
- move.w #512 ,d3
- sub.w d5 ,d3
-
- move.w d3 ,CHR_VX(a1)
-
- sub.w #512 ,d2
- sub.w d2 ,CHR_VX(a0)
- * bra.w @f
- bra.w CAN_CHECK
-
- SC_OVER: *************************************************
- * 画面よりも両者の距離が大きいか? *
- *************************************************
- cmp.w #256 ,d0
- blt.w SC_BASE
- *****************************************
- * 画面より大きいため座標補正 *
- *****************************************
- cmp.w #0 ,CHR_DIR(a0)
- bne.w SC_OVER1
- move.w CHR_VECT_X(a0) ,d1
- sub.w d1 ,CHR_VX(a0)
- bra.w SC_OVER2
- SC_OVER1:
- move.w CHR_VECT_X(a0) ,d1
- add.w d1 ,CHR_VX(a0)
- SC_OVER2:
- cmp.w #0 ,CHR_DIR(a1)
- bne.w SC_OVER3
- move.w CHR_VECT_X(a1) ,d1
- sub.w d1 ,CHR_VX(a1)
- bra.w SC_OVER4
- SC_OVER3:
- move.w CHR_VECT_X(a1) ,d1
- add.w d1 ,CHR_VX(a1)
- SC_OVER4:
- move.w CHR_VX(a0) ,REP_VRL_SPR_X(a2)
- add.w d4 ,REP_VRL_SPR_X(a2)
-
- bra.w CAN_CHECK
-
- SC_BASE:
- *************************************************
- * キャラを画面の中心に設定 *
- *************************************************
- moveq.l #0 ,d1
-
- move.w CHR_VX(a0) ,d3
- add.w d4 ,d3
-
- cmpi.w #0 ,d3
- bge.w SKIP2
- move.l CHR_AMD(a0) ,d3
- btst.l #BIT_AMD_FUNBARI ,d3
- bne.w SCR_OVER
- tst.w CHR_TMODE(a0)
- bne.w SKIP2
-
- moveq.l #0 ,d3
- sub.w d4 ,d3
- move.w d3 ,CHR_VX(a0)
- moveq.l #1 ,d1
- SKIP2:
- move.w CHR_VX(a1) ,d3
- add.w d5 ,d3
-
- cmpi.w #512 ,d3
- blt.w SKIP3
- move.l CHR_AMD(a1) ,d3
- btst.l #BIT_AMD_FUNBARI ,d3
- bne.w SCL_OVER
- tst.w CHR_TMODE(a1)
- bne.w SKIP3
-
- move.w #512 ,d3
- sub.w d5 ,d3
- move.w d3 ,CHR_VX(a1)
- moveq.l #1 ,d1
- SKIP3:
- lsr.w #1 ,d0
- add.w CHR_VX(a0) ,d0
- add.w d4 ,d0
-
- subi.w #128 ,d0
- cmp.w #0 ,d0
- blt.w SC_SMALL
- cmp.w #256 ,d0
- bgt.w SC_BIG
- *****************************************
- * *
- *****************************************
- move.w d0 ,REP_VRL_SPR_X(a2)
- cmp.w #1 ,d1
- beq.w CAN_CHECK
- bra.w @f
- SC_BIG: *****************************************
- * *
- *****************************************
- move.w #256 ,REP_VRL_SPR_X(a2)
- cmp.w #1 ,d1
- beq.w CAN_CHECK
- bra.w @f
- SC_SMALL: *****************************************
- * *
- *****************************************
- move.w #0 ,REP_VRL_SPR_X(a2)
- cmp.w #1 ,d1
- beq.w CAN_CHECK
- bra.w @f
- CAN_CHECK:
- *****************************************
- * 左側の壁の判定 *
- *****************************************
- move.l CHR_AMD(a0) ,d0
- btst.l #BIT_AMD_SIDE_WALL ,d0
- beq.w SC_WALL
- *********************************
- * 次のアニメに設定 *
- *********************************
- move.w #-1 ,CHR_FLG_SET_ANM(a0)
- bra.w @f
- SC_WALL:
- *****************************************
- * 右側の壁の判定 *
- *****************************************
- move.l CHR_AMD(a1) ,d0
- btst.l #BIT_AMD_SIDE_WALL ,d0
- beq.w @f
- *********************************
- * 次のアニメに設定 *
- *********************************
- move.w #-1 ,CHR_FLG_SET_ANM(a1)
- bra.w @f
- @@:
- *********************************************************
- * 終了 *
- *********************************************************
- move.w REP_VRL_SPR_X(a2) ,d1
- move.w d1 ,REP_GRP_SCR_X0(a2)
- move.w d1 ,REP_GRP_SCR_X1(a2)
-
- lsr.w #1 ,d1
- move.w d1 ,REP_GRP_SCR_X2(a2)
- move.w d1 ,REP_GRP_SCR_X3(a2)
- * add.w #64 ,REP_GRP_SCR_X2(a2)
- * add.w #64 ,REP_GRP_SCR_X3(a2)
-
-
- move.w CHR_VY(a0) ,d1
- move.w CHR_VY(a1) ,d2
- cmp.w d1 ,d2
- bge SKIP6
- move.w d2 ,d1
- SKIP6:
- move.w #88 ,REP_GRP_SCR_Y0(a2)
- move.w #88 ,REP_GRP_SCR_Y1(a2)
- move.w #88 ,REP_VRL_SPR_Y(a2)
- move.w #88 ,REP_GRP_SCR_Y2(a2)
- move.w #88 ,REP_GRP_SCR_Y3(a2)
- tst.w CHR_TMODE(a0)
- bne.w SKIP7
- tst.w CHR_TMODE(a1)
- bne.w SKIP7
-
- cmp.w #222 ,d1
- bge SKIP7
- move.w #222 ,d2
- sub.w d1 ,d2
- lsr.w #1 ,d2
- sub.w d2 ,REP_GRP_SCR_Y0(a2)
- sub.w d2 ,REP_GRP_SCR_Y1(a2)
- sub.w d2 ,REP_VRL_SPR_Y(a2)
- lsr.w #1 ,d2
- sub.w d2 ,REP_GRP_SCR_Y2(a2)
- sub.w d2 ,REP_GRP_SCR_Y3(a2)
- SKIP7:
- POP d0-d5/a0-a3
- rts
-